Skip to content

Introduce an alias which represents a callable that may not be defined in the current scope - #6

Merged
johnbillion merged 1 commit into
westonruter:fix/wp-hooks-phpstan-level-10-errorsfrom
johnbillion:maybe-callable
Aug 24, 2026
Merged

Introduce an alias which represents a callable that may not be defined in the current scope#6
johnbillion merged 1 commit into
westonruter:fix/wp-hooks-phpstan-level-10-errorsfrom
johnbillion:maybe-callable

Conversation

@johnbillion

Copy link
Copy Markdown

See review comments on WordPress#12443

Comment thread tests/phpstan/base.neon
* @param int $priority The exact priority used when adding the original filter callback.
* @return bool Whether the callback existed before it was removed.
* @phpstan-param callable|string|array{ 0: string|object, 1: string, ... } $callback
* @phpstan-param Maybe_Callable $callback

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing to note about this. PhpStorm doesn't understand what Maybe_Callable is:

Image

I seem to remember this being why I didn't go that route before.

Presumably other IDEs wouldn't either.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, there is a 2-year-old Jetbrains issue requesting support for PHPStan type aliases: https://youtrack.jetbrains.com/projects/WI/issues/WI-79519/PHPStorm-doesnt-recognise-PHPStan-global-type-aliases

So presumably this will land eventually.

However, VS Code + Intelephense doesn't yet support this either: bmewburn/vscode-intelephense#3525

But VS Code + DEVSENSE PHP Tools does support this.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something else to consider is whether the developer docs parser would need to be updated to support this.

In looking at the docs for \WP_Post::to_array(), I see that it doesn't do any parsing of:

@phpstan-return Data_Array

I also see the same in the docs for \WP_Connector_Registry::register(), that the @return is parsed but the @phpstan-return which includes tyhe type Connector is not mentioned.

So I think it's OK, if we only ever use these PHPStan type aliases in @phpstan- prefixed tags. However, I remember you mentioned the desire to be able to move away from having to do this. If so, then updating the developer docs parser would need to be added to the prerequisites.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm still not sure what to do about @phpstan- prefixed tags. I'll draft a make/core post soon.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See also WordPress#13233 which could lessen the need to add @phpstan- prefixed tags.

@westonruter westonruter left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants